//
// Created by dragon on 23-8-11.
//

#include <draw.h>
#include <pub.h>

// static void clear_screen() {
//     for (u32_t i = 0; i < __msg.width * __msg.height; i++) {
//         __msg.vitrual_addr[i] = COLOR_BLACK;
//     }
// }

void shows(const i8_t *buff, i32_t len) {
    i64_t i;
    i32_t spaces = 0;

    for (i = 0; i < len || spaces; i++) {
        // if (__msg.x_pos == 0 && __msg.y_pos == 0) {
        //     clear_screen();
        // }
        if (spaces > 0) {
            i--;
            goto spaceLab;
        } else if (buff[i] == '\n') {
            __msg.x = 0;
            __msg.y++;
        } else if (buff[i] == '\b') {
            __msg.x--;
            if (__msg.x < 0) {
                __msg.x = (__msg.width / 8 - 1) * 8;
                __msg.y--;
                if (__msg.y < 0) {
                    __msg.y = (__msg.height / 16 - 1) * 16;
                }
            }
            showc(&__msg, ' ');
        } else if (buff[i] == '\t') {
            spaces = ((__msg.x + 8) & ~(8 - 1)) - __msg.x;
        spaceLab:
            spaces--;
            showc(&__msg, ' ');
            __msg.x++;
        } else {
            showc(&__msg, buff[i]);
            __msg.x++;
        }

        if (__msg.x >= (__msg.width / 8)) {
            __msg.x = 0;
            __msg.y++;
        }
        if (__msg.y >= (__msg.height / 16)) {
            __msg.y = 0;
        }
    }
}
